外观
1. ELK Stack 部署规划
在开始 ELK Stack 部署之前,需要进行充分的规划和准备工作,确保系统的稳定性和性能。
1.1 系统要求评估
1.1.1 硬件配置要求
| 组件 | CPU | 内存 | 存储 | 网络 |
|---|---|---|---|---|
| Elasticsearch | 4 核+ | 16GB+ | SSD 500GB+ | 1Gbps+ |
| Logstash | 2 核+ | 4GB+ | SSD 100GB+ | 100Mbps+ |
| Kibana | 2 核+ | 4GB+ | SSD 50GB+ | 100Mbps+ |
生产环境配置建议
- Elasticsearch 建议配置 32GB+ 内存,SSD 存储
- JVM 堆内存设置为系统内存的 50%
- 存储空间规划:考虑日志保留周期和增长率
1.1.2 软件环境要求
- 操作系统: Linux/Windows/macOS (推荐 Linux)
- Java 版本: Elasticsearch 要求 JDK 11+
- 网络配置: 确保组件间网络连通性
- 防火墙设置: 配置必要的端口访问规则
1.2 版本选择策略
1.2.1 版本兼容性
版本升级注意事项
- 跨大版本升级需要谨慎规划(如 7.x → 8.x)
- 备份数据和配置至关重要
- 测试环境先行验证升级方案
1.2.2 版本匹配规则
- Elasticsearch 与 Kibana: 版本必须完全匹配
- Logstash: 支持与 Elasticsearch 小版本差异
- 插件版本: 必须与对应组件版本兼容
1.3 部署架构设计
1.3.1 单机部署架构
适用于开发测试环境或小型生产系统:
1.3.2 分布式部署架构
适用于大规模生产环境:
部署最佳实践
- 生产环境建议至少 3 个 Elasticsearch 节点
- Logstash 和 Elasticsearch 分离部署
- 配置负载均衡和高可用机制
2. ELK 安装部署
2.1 Docker 安装
yaml
version: '3.8'
services:
elasticsearch:
image: elasticsearch:8.4.3
container_name: elasticsearch
environment:
cluster.name: elasticsearch
discovery.type: single-node
ES_JAVA_OPTS: "-Xms4g -Xmx4g -Duser.timezone=Asia/Shanghai" # 设置时区为上海
xpack.security.enabled: false
TZ: Asia/Shanghai
volumes:
- ./elasticsearch/plugins:/usr/share/elasticsearch/plugins
- ./elasticsearch/data:/usr/share/elasticsearch/data
- ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
ports:
- 9200:9200
- 9300:9300
logging:
driver: json-file
options:
max-size: "50m"
max-file: "3"
networks:
elk-network:
ipv4_address: 172.20.0.2 # 指定了静态 IP 地址
filebeat:
image: filebeat:8.4.3
container_name: filebeat
depends_on:
- elasticsearch
- kibana
volumes:
- ./filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml
- ./data-log/:/usr/share/filebeat/data-log/
- ./filebeat/registry/:/usr/share/filebeat/data/registry/
environment:
- TZ=Asia/Shanghai
networks:
elk-network:
ipv4_address: 172.20.0.4 # 指定了静态 IP 地址
kibana:
image: kibana:8.4.3
container_name: kibana
depends_on:
- elasticsearch
environment:
elasticsearch.hosts: http://172.20.0.2:9200
i18n.locale: zh-CN
volumes:
- ./kibana/config:/usr/share/kibana/config
ports:
- 5601:5601
networks:
elk-network:
ipv4_address: 172.20.0.5 # 指定了静态 IP 地址
networks:
elk-network:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16 # 指定子网1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
5. 系统优化和监控
5.1 性能优化配置
5.1.1 Elasticsearch 优化
yaml
# elasticsearch.yml
# 内存锁定
bootstrap.memory_lock: true
# 集群设置
cluster.routing.allocation.node_initial_primaries_recoveries: 4
cluster.routing.allocation.node_concurrent_recoveries: 2
# 索引设置
index.refresh_interval: 30s
index.number_of_replicas: 11
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
5.1.2 JVM 调优
bash
# jvm.options
-XX:+UnlockExperimentalVMOptions
-XX:+UseCGroupMemoryLimitForHeap
-XX:MaxRAMPercentage=75.0
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/var/lib/elasticsearch1
2
3
4
5
6
2
3
4
5
6
5.2 监控和告警
5.2.1 健康检查
bash
# 集群健康检查
curl -X GET "localhost:9200/_cluster/health?pretty"
# 节点统计信息
curl -X GET "localhost:9200/_nodes/stats?pretty"
# 索引统计
curl -X GET "localhost:9200/_cat/indices?v"1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
5.2.2 日志监控
bash
# 查看 Elasticsearch 日志
tail -f /var/log/elasticsearch/elasticsearch.log
# 查看 Kibana 日志
tail -f /var/log/kibana/kibana.log
# 查看 Logstash 日志
tail -f /var/log/logstash/logstash.log1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
常见部署问题
- 内存不足: 增加 JVM 堆内存配置
- 端口冲突: 检查端口占用情况
- 权限问题: 确保目录权限正确
- 网络连接: 验证组件间网络连通性
6. 生产环境部署清单
6.1 前置检查
- [ ] 系统资源充足(CPU、内存、存储)
- [ ] 网络配置正确(防火墙、DNS)
- [ ] Java 版本兼容
- [ ] 备份策略制定
6.2 部署步骤
- [ ] 下载对应版本安装包
- [ ] 配置各组件参数
- [ ] 启动服务按正确顺序
- [ ] 验证服务状态
- [ ] 配置监控告警
6.3 验收标准
- [ ] 所有服务正常启动
- [ ] 组件间网络连通
- [ ] 数据能够正常写入和查询
- [ ] 监控指标正常
部署后立即执行的任务
- 配置备份策略
- 设置监控告警规则
- 创建测试索引验证功能
- 制定维护和升级计划